// -----------------------------------------------------------------------------
// M A R I T I M E   R E S E A R C H   I N S T I T U T E   N E T H E R L A N D S
// -----------------------------------------------------------------------------
// Copyright (C) December 17, 2009 MARIN - All rights reserved - http://www.marin.nl
// -----------------------------------------------------------------------------
// Program  :
// Module   :
// File     : GeometryManager.h
// -----------------------------------------------------------------------------

#ifndef GEOMETRYMANAGER_H
#define	GEOMETRYMANAGER_H

#include <vector>
#include <mml/Vector.h>
#include <mml/Matrix.h>

class Geometry;

// -----------------------------------------------------------------------------
// class GeometryManager
// -----------------------------------------------------------------------------
/// short description
/** long description */
// -----------------------------------------------------------------------------
class GeometryManager
{

public:

    GeometryManager();

    virtual ~GeometryManager();

    Geometry* getGeometry(int nr);

    void add(Geometry* pGeometry);

    unsigned int numberOfGeometries() const;

    const mml::Vector3d& getPosition(int nr) const;

    void setPosition(int nr, const mml::Vector3d& position);

    void setPositionOrientation(int nr, const mml::Vector3d& position, const mml::Vector3d& orientation);

    void setPositionAttitude(int nr, const mml::Vector3d& position, const mml::Matrix3d& attitude);

    REAL getAngle(int nr) const;

    void setAngle(int nr, REAL angle);

    void move(int nr, REAL deltaX, REAL deltaY);

private:
    
    GeometryManager(const GeometryManager& a_other);
    GeometryManager & operator=(const GeometryManager& a_other);

    std::vector<Geometry*> m_geometries; ///< list of geometries
};

#endif // GEOMETRYMANAGER_H

